欢迎来到第7课,我们将介绍迁移学习。该技术通过复用已在大规模通用数据集(如ImageNet)上训练过的深度学习模型,并将其适配到新的具体任务(如我们的FoodVision挑战)中来解决问题。在标注数据集有限的情况下,它对于高效实现顶尖性能至关重要。
1. 预训练权重的力量
深度神经网络以层次化的方式学习特征。底层学习基础概念(边缘、角点、纹理),而深层则将这些组合成复杂概念(眼睛、车轮、特定物体)。关键洞察在于,早期学到的基础特征在大多数视觉领域都具有普遍适用性跨大多数视觉领域均适用。
迁移学习的组成部分
- 源任务: 在1400万张图像和1000个类别上进行训练(例如,ImageNet)。
- 目标任务: 将权重调整以分类一个更小的数据集(例如,我们特定的FoodVision类别)。
- 被利用的部分: 网络参数中的绝大多数——即特征提取层——被直接复用。
效率提升
迁移学习显著降低了两大资源障碍:计算成本(你无需花费数天时间训练整个模型)以及数据需求(仅需数百个而非数千个训练样本即可达到高精度)。
终端bash — pytorch-env
> 准备就绪。点击“运行”以执行。
>
张量检查器实时
运行代码以检查活动张量
问题 1
使用在ImageNet上预训练的模型来解决新视觉任务的主要优势是什么?
问题 2
在迁移学习流程中,神经网络的哪一部分通常被冻结?
问题 3
在PyTorch中替换分类器头部时,必须首先从冻结的基底中确定哪个参数?
挑战:适配分类器头部
为FoodVision设计一个新的分类器。
你加载了一个在ImageNet上预训练的ResNet模型。其最后一个特征层输出一个大小为512的向量。你的‘FoodVision’项目有7个不同的食物类别。
步骤 1
新可训练线性层所需的输入特征尺寸是多少?
解答:
输入特征尺寸必须与冻结基底层的输出相匹配。
尺寸:512。
输入特征尺寸必须与冻结基底层的输出相匹配。
尺寸:512。
步骤 2
创建此新分类层的PyTorch代码片段是什么(假设输出名为`new_layer`)?
解答:
输出尺寸512作为输入,类别数量7作为输出。
代码:
输出尺寸512作为输入,类别数量7作为输出。
代码:
new_layer = torch.nn.Linear(512, 7)步骤 3
新线性层所需的输出特征尺寸是多少?
解答:
输出特征尺寸必须与目标类别的数量匹配。
尺寸:7。
输出特征尺寸必须与目标类别的数量匹配。
尺寸:7。